package family

import (
	"fmt"
	"path/filepath"
)

// 初始化 Family 结构，读取用户信息和交易记录
func InitFamily() *Family {
	var f Family

	// 获取所有用户文件
	files, err := filepath.Glob(filepath.Join(usersDir, "*.txt"))
	if err != nil {
		fmt.Println("无法获取用户文件:", err)
		return &f
	}

	// 遍历每个文件，读取用户信息
	for _, file := range files {
		user, err := readFile(file)
		if err != nil {
			fmt.Println("读取用户文件出错:", err)
			continue // 如果读取失败，跳过当前文件
		}
		f.users = append(f.users, user) // 将用户添加到 Family 中
	}
	return &f
}

// 运行家庭收支管理系统
func (f *Family) Run() {
	var option string
	loop, reg := true, false
	for loop {
		if reg {
			option = "1" //注册后自动登录
		} else {
			f.mainMenu() // 显示主菜单
			fmt.Scanln(&option)
		}
		switch option {
		case "1":
			if reg || f.login() { // 执行登录操作
				reg = false
				loop2 := true
				var option2 string
				for loop2 {
					f.loginMenu() // 显示登录菜单
					fmt.Scanln(&option2)
					switch option2 {
					case "1", "2":
						f.transaction(option2) // 登记收入或支出
					case "3":
						f.bill() // 显示账单
					case "4":
						loop3 := true
						var option3 int
						for loop3 {
							f.transMenu() // 显示转账菜单
							option3 = checkInt()
							if option3 >= 1 && option3 <= len(trans_menu)-1 {
								loop3 = f.transMoney(option3) //转账
							} else if option3 == len(trans_menu) {
								loop3 = false
							} else {
								fmt.Println("\t\t请输入有效的数字！")
							}
						}
					case "5":
						f.changePWD()
					case "6":
						fmt.Println("\t\t已注销！")
						loop2 = false
					default:
						fmt.Println("\t\t请输入正确的选项！")
					}
				}
			}
		case "2":
			f.register() // 注册新用户
			reg = true
		case "3":
			f.saveData()    // 保存用户数据
			loop = f.exit() // 退出程序
		default:
			fmt.Println("\t\t请输入正确的选项！")
		}
	}
	fmt.Println("\t\t\t欢迎下次使用！")
}

// 主菜单
func (f *Family) mainMenu() {
	fmt.Println("------------------------家庭收支记账系统------------------------")
	fmt.Println("------------------------1登录------------------------------")
	fmt.Println("------------------------2注册------------------------------")
	fmt.Println("------------------------3退出------------------------------")
	fmt.Printf("------------------------请选择(1-3):")
}

// 确认退出
func (f *Family) exit() bool {
	var option string
	fmt.Printf("\t\t确定要退出吗？(y/n)：")
	for {
		fmt.Scanln(&option)
		if option == "y" || option == "Y" || option == "n" || option == "N" {
			break
		}
		fmt.Printf("\t输入有误！请重新输入：")
	}
	if option == "y" || option == "Y" {
		return false
	} else {
		return true
	}
}
